import pygame;

from hero_sprite import HeroSprite

from back_groupd_sprites import *;
from enemy_sprite import *;

from fjwar_tools import *;




class PlaneGame(object):
    """飞机大战主游戏"""

    def __init__(self,plane_sprite_list):
        print("游戏初始化");
        pygame.init();
        #创建游戏窗口
        self.screen = pygame.display.set_mode(SCREEN_RECT.size);
        #创建游戏时钟
        self.clock = pygame.time.Clock();

        self.plane_sprite_list = plane_sprite_list;
        #调用私有方法-->完成精灵和精灵组的创建
        self.__create_sprites(self.plane_sprite_list);

        #英雄作为属性
        self.heroSprite = None;

        #设置定时器事件 --> 创建敌机 1s
        pygame.time.set_timer(CREATE_ENEMY_EVENT,1000);



    def startGame(self):
        print("飞机大战游戏开始！！！");
        while True:
            #更新/绘制精灵组
            self.__update_sprites();

            self.clock.tick(FRAME_PER_SEC);
            #事件监听
            self.__event_handler();
            #碰撞检测
            self.__check_collide();

            #更新屏幕显示
            pygame.display.update();





    def __create_sprites(self,plane_sprite_list):

        #给精灵组赋值,并且在方法里面给类添加属性
        self.back_group = pygame.sprite.Group(plane_sprite_list);

        #创建敌机的精灵组
        self.enemy_group = pygame.sprite.Group();

        #创建英雄精灵和英雄精灵组
        self.heroSprite = HeroSprite();
        self.hero_group = pygame.sprite.Group(self.heroSprite);



    def __event_handler(self):
        event_list = pygame.event.get();
        if len(event_list) > 0:
            # 事件监听
            for event in event_list:
                if event.type == pygame.QUIT:
                    print("退出游戏");
                    PlaneGame.__game_over();
                elif event.type == CREATE_ENEMY_EVENT:
                    #print("敌机出场。。。")
                    #创建敌机精灵
                    enemy = Enemy();
                    #将敌机 精灵添加到精灵组
                    self.enemy_group.add(enemy);





    def __check_collide(self):
        pass;

    def __update_sprites(self):
        #group的update方法会调用精灵的update方法。
        self.back_group.update();
        self.back_group.draw(self.screen);

        self.enemy_group.update();
        self.enemy_group.draw(self.screen);

        self.hero_group.update();
        self.hero_group.draw(self.screen);




    @staticmethod
    def __game_over():
        print("游戏结束");
        pygame.quit();
        exit();


if __name__ == '__main__':
    bg = BackGroup("./images/background.png");
    bg1 = BackGroup("./images/background.png",True);
    game_tuple = (bg,bg1);

    #创建游戏对象
    game = PlaneGame(game_tuple);

    pygame.init();

    #启动游戏
    game.startGame();


